/**
 *给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符，并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。
 *
 * 在执行上述操作后，返回包含相同字母的最长子字符串的长度。
 *https://leetcode.cn/problems/longest-repeating-character-replacement/description/
 */
class CharacterReplacement {
    public int characterReplacement(String s, int k) {
        int[] freq = new int[26];
        int res = 0;
        char[] arr = s.toCharArray();
        int left = 0,right = 0;
        int len = s.length();
        int maxCount = 0;
        while(right < len) {
            freq[arr[right]-'A']++;
            maxCount = Math.max(maxCount,freq[arr[right]-'A']);
            right++;
            if(right - left > maxCount + k) {
                freq[arr[left]-'A']--;
                left++;
            }
            res = Math.max(res,right - left);
        }
        return res;
    }
}